SlideShare a Scribd company logo
1 of 92
The Unbearable
                           Stupidity of Modeling
                                                       Ed Merks | Peter Friese




                           (c) 2009 Ed Merks | Peter Friese. Distributed under the EDL V1.0 - http://www.eclipse.org/org/documents/edl-v10.php

Thursday, March 26, 2009
Twitter:
                           #eclipsecon #emf

                    http://ed-merks.blogspot.com
                      http://www.peterfriese.de


Thursday, March 26, 2009
“The Learning Curve is Too Steep”




Thursday, March 26, 2009
“The Learning Curve is Too Steep”




Thursday, March 26, 2009
“The Learning Curve is Too Steep”




          • Use newsgroups


Thursday, March 26, 2009
“The Learning Curve is Too Steep”




          • Use newsgroups
          • Get Trained: Eclipse Training Alliance

Thursday, March 26, 2009
“The Learning Curve is Too Steep”




          • Use newsgroups
          • Get Trained: Eclipse Training Alliance
          • Consult with someone who knows
Thursday, March 26, 2009
“UML is Way Too Complex”




Thursday, March 26, 2009
“UML is Way Too Complex”




Thursday, March 26, 2009
“UML is Way Too Complex”




                            UML 1: 9 diagram types




Thursday, March 26, 2009
“UML is Way Too Complex”




                            UML 1: 9 diagram types
                            UML 2: 13 diagram types




Thursday, March 26, 2009
“UML is Way Too Complex”




                             UML 1: 9 diagram types
                             UML 2: 13 diagram types
                           Complex underlying structure



Thursday, March 26, 2009
“UML is Way Too Complex”




                             UML 1: 9 diagram types
                             UML 2: 13 diagram types
                           Complex underlying structure
                               UML ≠ Modeling


Thursday, March 26, 2009
“UML is Way Too Complex”




                             UML 1: 9 diagram types
                             UML 2: 13 diagram types
                           Complex underlying structure
                                UML ≠ Modeling
                            You don’t need to use it!
Thursday, March 26, 2009
So What is Modeling Anyway?
                           Basically a model is a simplified abstract
                                  view of the complex reality
                                                   (Wikipedia)




Thursday, March 26, 2009
So What is Modeling Anyway?
                           Basically a model is a simplified abstract
                                    view of the complex reality
                                                  (Wikipedia)




Thursday, March 26, 2009
It’s about simplicity!
                           Basically a model is a simplified abstract
                                    view of the complex reality
                                                  (Wikipedia)




Thursday, March 26, 2009
It’s about simplicity!
                           Basically a model is a simplified abstract
                                    view of the complex reality
                                                  (Wikipedia)




Thursday, March 26, 2009
It’s about simplicity!
                           Basically a model is a simplified abstract
                                    view of the complex reality
                                                  (Wikipedia)




Thursday, March 26, 2009
It’s about simplicity!
                           Basically a model is a simplified abstract
                                    view of the complex reality
                                                  (Wikipedia)




                                                                     Car
                                                                color
                                                                maxSpeed
                                                                startEngine
                                                                accelerate
                                                                stopEngine
                                                                brake




Thursday, March 26, 2009
“Oh, That’s Too Abstract For Me!”




Thursday, March 26, 2009
“Oh, That’s Too Abstract For Me!”


                              Abstraction is the process [...] of
                           reducing the information content of a
                            concept [...] to retain only information
                             which is relevant for a particular
                                           purpose.




Thursday, March 26, 2009
@SuppressWarnings(quot;serialquot;)
                @Entity
                @Table(name = quot;CUSTOMER_INFOquot;)
                public class CustomerInfo implements Serializable {

                	     @Id
                	     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = quot;idSeqquot;)
                	     @SequenceGenerator(name = quot;idSeqquot;, sequenceName = quot;CUST_SEQquot;, allocationSize = 1)
                	     @Column(name = quot;CUST_IDquot;, nullable = false)
                	     private String customerId;

                	     public void setCustomerId(String customerId) {
                	     	   this.customerId = customerId;
                	     }

                	     public String getCustomerId() {
                	     	   return customerId;
                	     }

                	     @Column(name = quot;EMAILquot;, nullable = false, length = 128)
                	     private String emailAddress;

                	     public String getEmailAddress() {
                	     	   return emailAddress;
                	     }

                	     public void setEmailAddress(String emailAddress) {
                	     	   String oldValue = emailAddress;
                	     	   this.emailAddress = emailAddress;
                	     	   firePropertyChangedEvent(quot;emailAddressquot;, oldValue, this.emailAddress);
                	     }




Thursday, March 26, 2009
@SuppressWarnings(quot;serialquot;)
                @Entity
                @Table(name = quot;CUSTOMER_INFOquot;)
                public class CustomerInfo implements Serializable {

                	     @Id
                	     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = quot;idSeqquot;)
                	     @SequenceGenerator(name = quot;idSeqquot;, sequenceName = quot;CUST_SEQquot;, allocationSize = 1)
                	     @Column(name = quot;CUST_IDquot;, nullable = false)
                	     private String customerId;

                	     public void setCustomerId(String customerId) {
                	     	   this.customerId = customerId;
                	     }

                	     public String getCustomerId() {
                	     	   return customerId;
                	     }

                	     @Column(name = quot;EMAILquot;, nullable = false, length = 128)
                	     private String emailAddress;

                	     public String getEmailAddress() {
                	     	   return emailAddress;
                	     }

                	     public void setEmailAddress(String emailAddress) {
                	     	   String oldValue = emailAddress;
                	     	   this.emailAddress = emailAddress;
                	     	   firePropertyChangedEvent(quot;emailAddressquot;, oldValue, this.emailAddress);
                	     }




Thursday, March 26, 2009
entity CustomerInfo
                           	   (id=CUST_ID, sequenceName=CUST_SEQ) {
                           	
                           	   String emailAddress (notNull, length = 128)
                           	
                           }




Thursday, March 26, 2009
entity CustomerInfo
                           	   (id=CUST_ID, sequenceName=CUST_SEQ) {
                           	
                           	   String emailAddress (notNull, length = 128)
                           	
                           }




                            This actually is a model!




Thursday, March 26, 2009
entity CustomerInfo
                                 	   (id=CUST_ID, sequenceName=CUST_SEQ) {
                                 	
                                 	   String emailAddress (notNull, length = 128)
                                 	
                                 }




                                  This actually is a model!
                           Don’t believe? Come to the Xtext BOF.



Thursday, March 26, 2009
Models Can Take Different Shapes
                           Basically a model is a simplified abstract
                                 view of the complex reality
                                                                                 (Wikipedia)
                                                 !quot;#$%&'()*+quot;,-)+./0(+123'$+24
                                                 ....!quot;#$%#+56+/&+4
                                                 ......!quot;#$%+*+(+/7.
                                                 ......../0(+12&89*$:+/2.
                                                 ........7-)+127:++%3'$+2.
                                                 ........(9/;&&6:#12<2
                                                 ........(0quot;;&&6:#126/='6/$+$2.
                                                 ........+&':+%'))'#97+12)0:+/72>4
                                                 ....!>quot;#$%#+56+/&+4
                                                                                                !quot;#$%&'%()*+,-&*'./0*'1
                                                 ....!quot;#$%077:9=67+.
                                                 ....../0(+12*0=+*2.
                                                                                                ''2)+%(3'3*)4-#*$567
                                                 ......7-)+12quot;#$%#7:9/?2>4
                                                                                                ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67
                                                 !>quot;#$%&'()*+quot;,-)+4
                                                                                                ''4%9):./0*;'3*)<=%$0+*(567
                                                                                                ''./0*'3*)>-+*()567
                                                                                                ''8/%0'9*)>-+*()5./0*'8-$quot;*67
                                                                                                ?'@@'./0*
                                        0..1
                                        parent
                                                                Node
                                                           label: EString

                                                                                     0..*
                                                                                     children




Thursday, March 26, 2009
Models Can Take Different Shapes
                                              Basically a model is a simplified abstract
                                                    view of the complex reality
                                                                         (Wikipedia)


                                                                                       !quot;#$%&'()*+quot;,-)+./0(+123'$+24
                                                                                       ....!quot;#$%#+56+/&+4
                                                                                       ......!quot;#$%+*+(+/7.
                0..1
                                                                                       ......../0(+12&89*$:+/2.
                parent
                                                                                       ........7-)+127:++%3'$+2.
                              Node
                                                                                       ........(9/;&&6:#12<2
                         label: EString
                                                                                       ........(0quot;;&&6:#126/='6/$+$2.
                                                                                       ........+&':+%'))'#97+12)0:+/72>4
                                   0..*
                                                                                       ....!>quot;#$%#+56+/&+4
                                   children
                                                                                       ....!quot;#$%077:9=67+.
                                                                                       ....../0(+12*0=+*2.

                                                      !quot;#$%&'%()*+,-&*'./0*'1          ......7-)+12quot;#$%#7:9/?2>4
                                                                                       !>quot;#$%&'()*+quot;,-)+4


                                                      ''2)+%(3'3*)4-#*$567
                                                      ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67
                                                      ''4%9):./0*;'3*)<=%$0+*(567
                                                      ''./0*'3*)>-+*()567
                                                      ''8/%0'9*)>-+*()5./0*'8-$quot;*67
                                                      ?'@@'./0*




Thursday, March 26, 2009
Models Can Take Different Shapes
                                  Basically a model is a simplified abstract
                                        view of the complex reality
                                                                                      (Wikipedia)
                                                        0..1
                                                        parent
                                                                      Node
                                                                 label: EString

                                                                           0..*
                                                                           children
          !quot;#$%&'%()*+,-&*'./0*'1
          ''2)+%(3'3*)4-#*$567
                                           !quot;#$%&'()*+quot;,-)+./0(+123'$+24
          ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67
          ''4%9):./0*;'3*)<=%$0+*(567
                                           ....!quot;#$%#+56+/&+4
          ''./0*'3*)>-+*()567
          ''8/%0'9*)>-+*()5./0*'8-$quot;*67
          ?'@@'./0*
                                           ......!quot;#$%+*+(+/7.
                                           ......../0(+12&89*$:+/2.
                                           ........7-)+127:++%3'$+2.
                                           ........(9/;&&6:#12<2
                                           ........(0quot;;&&6:#126/='6/$+$2.
                                           ........+&':+%'))'#97+12)0:+/72>4
                                           ....!>quot;#$%#+56+/&+4
                                           ....!quot;#$%077:9=67+.
                                           ....../0(+12*0=+*2.
                                           ......7-)+12quot;#$%#7:9/?2>4
                                           !>quot;#$%&'()*+quot;,-)+4



Thursday, March 26, 2009
Models Can Take Different Shapes
                                       Basically a model is a simplified abstract
                                             view of the complex reality
                                                                                   (Wikipedia)

                                                       !quot;#$%&'%()*+,-&*'./0*'1
                                                       ''2)+%(3'3*)4-#*$567
                                                       ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67
                                                       ''4%9):./0*;'3*)<=%$0+*(567
           !quot;#$%&'()*+quot;,-)+./0(+123'$+24
                                                       ''./0*'3*)>-+*()567
           ....!quot;#$%#+56+/&+4
                                                       ''8/%0'9*)>-+*()5./0*'8-$quot;*67
           ......!quot;#$%+*+(+/7.                                                                   0..1
                                                       ?'@@'./0*
           ......../0(+12&89*$:+/2.                                                              parent
           ........7-)+127:++%3'$+2.                                                                           Node
           ........(9/;&&6:#12<2                                                                          label: EString
           ........(0quot;;&&6:#126/='6/$+$2.
           ........+&':+%'))'#97+12)0:+/72>4                                                                        0..*
           ....!>quot;#$%#+56+/&+4                                                                                      children
           ....!quot;#$%077:9=67+.
           ....../0(+12*0=+*2.
           ......7-)+12quot;#$%#7:9/?2>4
           !>quot;#$%&'()*+quot;,-)+4




Thursday, March 26, 2009
EMF Acts as a Hub for Models
                                                                            !quot;#$%&'()*+quot;,-)+./0(+123'$+24
                                                                            ....!quot;#$%#+56+/&+4
            0..1                                                            ......!quot;#$%+*+(+/7.
            parent                                                          ......../0(+12&89*$:+/2.
                           Node                                             ........7-)+127:++%3'$+2.
                      label: EString                                        ........(9/;&&6:#12<2
                                                                            ........(0quot;;&&6:#126/='6/$+$2.
                                                                            ........+&':+%'))'#97+12)0:+/72>4
                                0..*
                                                                            ....!>quot;#$%#+56+/&+4
                                children
                                                                            ....!quot;#$%077:9=67+.
                                                                            ....../0(+12*0=+*2.
                                                                            ......7-)+12quot;#$%#7:9/?2>4
                                                                            !>quot;#$%&'()*+quot;,-)+4




                                           !quot;#$%&'%()*+,-&*'./0*'1
                                           ''2)+%(3'3*)4-#*$567
                                           ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67
                                           ''4%9):./0*;'3*)<=%$0+*(567
                                           ''./0*'3*)>-+*()567
                                           ''8/%0'9*)>-+*()5./0*'8-$quot;*67
                                           ?'@@'./0*


Thursday, March 26, 2009
EMF Acts as a Hub for Models
                                                                            !quot;#$%&'()*+quot;,-)+./0(+123'$+24
                                                                            ....!quot;#$%#+56+/&+4
            0..1                                                            ......!quot;#$%+*+(+/7.
            parent                                                          ......../0(+12&89*$:+/2.
                           Node                                             ........7-)+127:++%3'$+2.
                      label: EString                                        ........(9/;&&6:#12<2
                                                                            ........(0quot;;&&6:#126/='6/$+$2.
                                                                            ........+&':+%'))'#97+12)0:+/72>4
                                0..*
                                                                            ....!>quot;#$%#+56+/&+4
                                children
                                                                            ....!quot;#$%077:9=67+.
                                                                            ....../0(+12*0=+*2.
                                                                            ......7-)+12quot;#$%#7:9/?2>4
                                                                            !>quot;#$%&'()*+quot;,-)+4




                                           !quot;#$%&'%()*+,-&*'./0*'1
                                           ''2)+%(3'3*)4-#*$567
                                           ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67
                                           ''4%9):./0*;'3*)<=%$0+*(567
                                           ''./0*'3*)>-+*()567
                                           ''8/%0'9*)>-+*()5./0*'8-$quot;*67
                                           ?'@@'./0*


Thursday, March 26, 2009
“All This Buzz About Meta - It Drives
                 Me Crazy!”




Thursday, March 26, 2009
“All This Buzz About Meta - It Drives
                 Me Crazy!”




Thursday, March 26, 2009
“All This Buzz About Meta - It Drives
                 Me Crazy!”




Thursday, March 26, 2009
Don’t Panic.
Thursday, March 26, 2009
Meta = Description

                                                            aNode1
                                                         label: quot;carquot;

                           0..1
                           parent                                          aNode2
                                         Node                           label: quot;wheelquot;
                                    label: EString
                                                                           aNode3
                                              0..*                      label: quot;wheelquot;
                                              children

                                                                           aNode4
                                                                        label: quot;wheelquot;

                                                                           aNode5
                                                                        label: quot;wheelquot;




Thursday, March 26, 2009
Meta = Description

                                                             aNode1
                                                          label: quot;carquot;

                            0..1
                            parent                                             aNode2
                                          Node                              label: quot;wheelquot;
                                     label: EString
                                                                               aNode3
                                               0..*                         label: quot;wheelquot;
                                               children

                                                                               aNode4
                                                                            label: quot;wheelquot;

                                                                               aNode5
                                                                            label: quot;wheelquot;




                           Description                                   Instance

Thursday, March 26, 2009
Meta = Description

                                                             aNode1
                                                          label: quot;carquot;

                            0..1
                            parent                                             aNode2
                                          Node                              label: quot;wheelquot;
                                     label: EString
                                                                               aNode3
                                               0..*                         label: quot;wheelquot;
                                               children

                                                                               aNode4
                                                                            label: quot;wheelquot;

                                                                               aNode5
                                                                            label: quot;wheelquot;




                           Description                                   Instance

Thursday, March 26, 2009
Meta = Description

                                                             aNode1
                                                          label: quot;carquot;

                            0..1
                            parent                                             aNode2
                                          Node                              label: quot;wheelquot;
                                     label: EString
                                                                               aNode3
                                               0..*                         label: quot;wheelquot;
                                               children

                                                                               aNode4
                                                                            label: quot;wheelquot;

                                                                               aNode5
                                                                            label: quot;wheelquot;




                           Description                                   Instance

Thursday, March 26, 2009
“Modeling is Too Restrictive...”




                               http://www.flickr.com/photos/two-wrongs/205467442/




                           “...it will limit my creativity”
Thursday, March 26, 2009
Let’s Talk About Creativity




Thursday, March 26, 2009
Let’s Talk About Creativity
                                     How To Create A Bean Class
                                      With A Simple Property

                                 – Create an interface to represent the API
                                   for X
                                    • A method to get the value of y
                                    • A method to set the value of y


                                 – A class to implement that API for X
                                   • A variable to store the state for y
                                   • Code to initialize the default value
                                   • A method to get the value of y
                                   • A method to set the value of y


                                 – A factory interface for creating
                                   instances
                                    • A method to create an instance of X


                                 – An class to implement the factory
                                   interface
                                    • A method to create an instance of the
                                      class for X



Thursday, March 26, 2009
Let’s Talk About Creativity
                       How To Create A Bean Class
                        With A Simple Property

                 – Create an interface to represent the API
                   for X
                    • A method to get the value of y
                    • A method to set the value of y


                 – A class to implement that API for X
                   • A variable to store the state for y
                   • Code to initialize the default value
                   • A method to get the value of y
                   • A method to set the value of y


                 – A factory interface for creating
                   instances
                    • A method to create an instance of X


                 – An class to implement the factory
                   interface
                    • A method to create an instance of the
                      class for X



Thursday, March 26, 2009
Let’s Talk About Creativity
                       How To Create A Bean Class
                        With A Simple Property

                 – Create an interface to represent the API
                   for X
                    • A method to get the value of y
                    • A method to set the value of y


                 – A class to implement that API for X
                   • A variable to store the state for y
                   • Code to initialize the default value
                   • A method to get the value of y
                   • A method to set the value of y


                 – A factory interface for creating
                   instances
                    • A method to create an instance of X


                 – An class to implement the factory
                   interface
                    • A method to create an instance of the
                      class for X



Thursday, March 26, 2009
Tedium is the True Killer of Creativity


                                             manually written
                                                 code

                                                                Frameworks

                           schematic code (manually written)



                                                Libraries




Thursday, March 26, 2009
Code Generation Kills Tedium

                            Model
                                             manually written
                                                 code
                           Generator
                                                                Frameworks

                               schematic code (generated)




                                                 Libraries




Thursday, March 26, 2009
How Code Generation Works
       Step 1: capture knowledge




Thursday, March 26, 2009
How Code Generation Works
       Step 1: capture knowledge
                                    Eclipse Guru
                                     Generator




Thursday, March 26, 2009
How Code Generation Works
       Step 1: capture knowledge




Thursday, March 26, 2009
How Code Generation Works
       Step 1: capture knowledge




Thursday, March 26, 2009
How Code Generation Works
       Step 1: capture knowledge
       Step 2: provide model




Thursday, March 26, 2009
How Code Generation Works
       Step 1: capture knowledge
       Step 2: provide model



   entity CustomerInfo
   	      (id=CUST_ID, sequenceName=CUST_SEQ) {
   	
   	      String emailAddress (notNull, length = 128)
   	
   }




Thursday, March 26, 2009
How Code Generation Works
       Step 1: capture knowledge
       Step 2: provide model
       Step 3: generate code


   entity CustomerInfo
   	      (id=CUST_ID, sequenceName=CUST_SEQ) {
   	
   	      String emailAddress (notNull, length = 128)
   	
   }




Thursday, March 26, 2009
How Code Generation Works
       Step 1: capture knowledge
       Step 2: provide model
       Step 3: generate code
                                    @SuppressWarnings(quot;serialquot;)
                                    @Entity
                                    @Table(name = quot;CUSTOMER_INFOquot;)
                                    public class CustomerInfo implements Serializable {

                                    	      @Id
                                    	      @GeneratedValue(strategy = GenerationType.SEQUENCE,
                                                             generator = quot;idSeqquot;)
                                    	      @SequenceGenerator(name = quot;idSeqquot;, sequenceName =
                                                               quot;CUST_SEQquot;, allocationSize = 1)
                                    	      @Column(name = quot;CUST_IDquot;, nullable = false)
                                    	      private String customerId;

                                    	      public void setCustomerId(String customerId) {
                                    	      	      this.customerId = customerId;
                                    	      }

                                    	      public entity CustomerInfo
                                                   String getCustomerId() {
                                                  	      (id=CUST_ID, sequenceName=CUST_SEQ) {
                                    	      	        return customerId;
                                                  	
                                    	      }      	      String emailAddress (notNull, length =   128)
                                                     	
                                                     }

                                    	      @Column(name = quot;EMAILquot;, nullable = false, length = 128)
                                    	      private String emailAddress;

                                    	      public String getEmailAddress() {
                                    	      	      return emailAddress;
                                    	      }

                                    	      public     void setEmailAddress(String emailAddress) {
                                    	      	          String oldValue = emailAddress;
                                    	      	          this.emailAddress = emailAddress;
                                    	      	          firePropertyChangedEvent(quot;emailAddressquot;,
                                                            oldValue, this.emailAddress);
                                    	      }




Thursday, March 26, 2009
“Ok, But Generated Code Sucks”




Thursday, March 26, 2009
“Ok, But Generated Code Sucks”

                                 Oh, really?!




Thursday, March 26, 2009
“Ok, But Generated Code Sucks”




Thursday, March 26, 2009
“Ok, But Generated Code Sucks”

                    •      YOU write the code generator




Thursday, March 26, 2009
“Ok, But Generated Code Sucks”

                    •      YOU write the code generator

                           •   YOU are responsible for code quality




Thursday, March 26, 2009
“Ok, But Generated Code Sucks”

                    •      YOU write the code generator

                           •   YOU are responsible for code quality

                           •   YOU are responsible for performance




Thursday, March 26, 2009
“Ok, But Generated Code Sucks”

                    •      YOU write the code generator

                           •   YOU are responsible for code quality

                           •   YOU are responsible for performance




Thursday, March 26, 2009
“Ok, But Generated Code Sucks”

                    •      YOU write the code generator

                           •   YOU are responsible for code quality

                           •   YOU are responsible for performance



                    •      Template Languages have matured




Thursday, March 26, 2009
“Ok, But Generated Code Sucks”

                    •      YOU write the code generator

                           •   YOU are responsible for code quality

                           •   YOU are responsible for performance



                    •      Template Languages have matured

                           •   JET / Acceleo / Xpand




Thursday, March 26, 2009
“Diagrams Suck”




Thursday, March 26, 2009
“Diagrams Suck”

                                      •   Use wisely!




Thursday, March 26, 2009
“Diagrams Suck”

                                      •   Use wisely!

                                      •   Domain Specific
                                          Diagrams :-)




Thursday, March 26, 2009
“Diagrams Suck”

                                      •   Use wisely!

                                      •   Domain Specific
                                          Diagrams :-)

                                      •   Overview :-)




Thursday, March 26, 2009
“Diagrams Suck”

                                      •   Use wisely!

                                      •   Domain Specific
                                          Diagrams :-)

                                      •   Overview :-)

                                      •   Reverse
                                          Engineering :-(




Thursday, March 26, 2009
“DSLs will create a Tower of Babel”




Thursday, March 26, 2009
“DSLs will create a Tower of Babel”




Thursday, March 26, 2009
“DSLs will create a Tower of Babel”

                           Will domain experts write programs?




Thursday, March 26, 2009
“DSLs will create a Tower of Babel”

                            Will domain experts write programs?

                           No - but they will be able to read them!




Thursday, March 26, 2009
“DSLs will create a Tower of Babel”

                            Will domain experts write programs?

                           No - but they will be able to read them!



                             Language barriers get torn down !




Thursday, March 26, 2009
“Modeling Enforces Onerous Processes”




                           http://www.flickr.com/photos/orvaratli/2620988946/




Thursday, March 26, 2009
“Modeling Enforces Onerous Processes”




Thursday, March 26, 2009
“Modeling Enforces Onerous Processes”




                           Modeling is just a tool




Thursday, March 26, 2009
“Modeling Enforces Onerous Processes”




                                   Modeling is just a tool
                           Tools are orthogonal to your process


Thursday, March 26, 2009
“Modeling Enforces Onerous Processes”




                               Modeling is just a tool
                       Tools are orthogonal to your process
                    Modeling can be use with any kind of process

Thursday, March 26, 2009
“Modeling is Just a Marketing Ploy”




Thursday, March 26, 2009
“Modeling is Just a Marketing Ploy”

                 Expensive tools




Thursday, March 26, 2009
“Modeling is Just a Marketing Ploy”

                 Expensive tools

                 Vendor lock-in




Thursday, March 26, 2009
“Modeling is Just a Marketing Ploy”

                 Expensive tools

                 Vendor lock-in

                 Expensive support
                 contracts




Thursday, March 26, 2009
“Modeling is Just a Marketing Ploy”

                 Expensive tools

                 Vendor lock-in

                 Expensive support
                 contracts

                 Incompatible versions




Thursday, March 26, 2009
“Modeling is Just a Marketing Ploy”

                 Expensive tools

                 Vendor lock-in

                 Expensive support
                 contracts

                 Incompatible versions




Thursday, March 26, 2009
“Modeling is Just a Marketing Ploy”




                            Can you say “Open Source”?
                           SD Times rates EMF “Top Shelf”
      (http://www.sdtimes.com/content/article.aspx?ArticleID=32287)

Thursday, March 26, 2009
“Modeling Will Make Me Redundant”




Thursday, March 26, 2009
Three Things To Take Home




Thursday, March 26, 2009
Three Things To Take Home

                               Generated code is as good as the
                               effort you put into the Generator




Thursday, March 26, 2009
Three Things To Take Home

                               Generated code is as good as the
                               effort you put into the Generator

                      The Eclipse Modeling Project
                      provides a great tool stack - for free!




Thursday, March 26, 2009
Three Things To Take Home

                               Generated code is as good as the
                               effort you put into the Generator

                      The Eclipse Modeling Project
                      provides a great tool stack - for free!


                              Modeling will set your creativity free!


Thursday, March 26, 2009

More Related Content

What's hot

ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたAkira Iwamoto
 
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてDeep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてNTT DATA Technology & Innovation
 
The Anatomy Of The Google Architecture Fina Lv1.1
The Anatomy Of The Google Architecture Fina Lv1.1The Anatomy Of The Google Architecture Fina Lv1.1
The Anatomy Of The Google Architecture Fina Lv1.1Hassy Veldstra
 
CMake - Introduction and best practices
CMake - Introduction and best practicesCMake - Introduction and best practices
CMake - Introduction and best practicesDaniel Pfeifer
 
The future of RISC-V Supervisor Binary Interface(SBI)
The future of RISC-V Supervisor Binary Interface(SBI)The future of RISC-V Supervisor Binary Interface(SBI)
The future of RISC-V Supervisor Binary Interface(SBI)Atish Patra
 
SAN Extension Design and Solutions
SAN Extension Design and SolutionsSAN Extension Design and Solutions
SAN Extension Design and SolutionsTony Antony
 
Creating a fuzzer for telecom protocol 4G LTE case study
Creating a fuzzer for telecom protocol 4G LTE case studyCreating a fuzzer for telecom protocol 4G LTE case study
Creating a fuzzer for telecom protocol 4G LTE case studyPositiveTechnologies
 
Strengthen your security posture! Getting started with IBM Z Pervasive Encryp...
Strengthen your security posture! Getting started with IBM Z Pervasive Encryp...Strengthen your security posture! Getting started with IBM Z Pervasive Encryp...
Strengthen your security posture! Getting started with IBM Z Pervasive Encryp...Tony Pearson
 
LAS16-200: SCMI - System Management and Control Interface
LAS16-200:  SCMI - System Management and Control InterfaceLAS16-200:  SCMI - System Management and Control Interface
LAS16-200: SCMI - System Management and Control InterfaceLinaro
 
SQLインジェクション総”習”編
SQLインジェクション総”習”編SQLインジェクション総”習”編
SQLインジェクション総”習”編Yasuo Ohgaki
 
Reconnaissance of Virtio: What’s new and how it’s all connected?
Reconnaissance of Virtio: What’s new and how it’s all connected?Reconnaissance of Virtio: What’s new and how it’s all connected?
Reconnaissance of Virtio: What’s new and how it’s all connected?Samsung Open Source Group
 
Telemetry事始め
Telemetry事始めTelemetry事始め
Telemetry事始めnpsg
 
Wordpress 権限昇格の脆弱性について
Wordpress 権限昇格の脆弱性についてWordpress 権限昇格の脆弱性について
Wordpress 権限昇格の脆弱性についてYu Iwama
 
Install Guide: Honeywell Vista 128BPT and 250BPT
Install Guide: Honeywell Vista 128BPT and 250BPTInstall Guide: Honeywell Vista 128BPT and 250BPT
Install Guide: Honeywell Vista 128BPT and 250BPTAlarm Grid
 
Achieving the ultimate performance with KVM
Achieving the ultimate performance with KVM Achieving the ultimate performance with KVM
Achieving the ultimate performance with KVM ShapeBlue
 

What's hot (20)

ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみた
 
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてDeep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
 
The Anatomy Of The Google Architecture Fina Lv1.1
The Anatomy Of The Google Architecture Fina Lv1.1The Anatomy Of The Google Architecture Fina Lv1.1
The Anatomy Of The Google Architecture Fina Lv1.1
 
CMake - Introduction and best practices
CMake - Introduction and best practicesCMake - Introduction and best practices
CMake - Introduction and best practices
 
The future of RISC-V Supervisor Binary Interface(SBI)
The future of RISC-V Supervisor Binary Interface(SBI)The future of RISC-V Supervisor Binary Interface(SBI)
The future of RISC-V Supervisor Binary Interface(SBI)
 
SAN Extension Design and Solutions
SAN Extension Design and SolutionsSAN Extension Design and Solutions
SAN Extension Design and Solutions
 
Creating a fuzzer for telecom protocol 4G LTE case study
Creating a fuzzer for telecom protocol 4G LTE case studyCreating a fuzzer for telecom protocol 4G LTE case study
Creating a fuzzer for telecom protocol 4G LTE case study
 
CMake best practices
CMake best practicesCMake best practices
CMake best practices
 
Strengthen your security posture! Getting started with IBM Z Pervasive Encryp...
Strengthen your security posture! Getting started with IBM Z Pervasive Encryp...Strengthen your security posture! Getting started with IBM Z Pervasive Encryp...
Strengthen your security posture! Getting started with IBM Z Pervasive Encryp...
 
Linux : PSCI
Linux : PSCILinux : PSCI
Linux : PSCI
 
LAS16-200: SCMI - System Management and Control Interface
LAS16-200:  SCMI - System Management and Control InterfaceLAS16-200:  SCMI - System Management and Control Interface
LAS16-200: SCMI - System Management and Control Interface
 
SQLインジェクション総”習”編
SQLインジェクション総”習”編SQLインジェクション総”習”編
SQLインジェクション総”習”編
 
IIJmio meeting 19 IIJ フルMVNO徹底解説
IIJmio meeting 19 IIJ フルMVNO徹底解説IIJmio meeting 19 IIJ フルMVNO徹底解説
IIJmio meeting 19 IIJ フルMVNO徹底解説
 
Reconnaissance of Virtio: What’s new and how it’s all connected?
Reconnaissance of Virtio: What’s new and how it’s all connected?Reconnaissance of Virtio: What’s new and how it’s all connected?
Reconnaissance of Virtio: What’s new and how it’s all connected?
 
Telemetry事始め
Telemetry事始めTelemetry事始め
Telemetry事始め
 
Improve Android System Component Performance
Improve Android System Component PerformanceImprove Android System Component Performance
Improve Android System Component Performance
 
Wordpress 権限昇格の脆弱性について
Wordpress 権限昇格の脆弱性についてWordpress 権限昇格の脆弱性について
Wordpress 権限昇格の脆弱性について
 
Install Guide: Honeywell Vista 128BPT and 250BPT
Install Guide: Honeywell Vista 128BPT and 250BPTInstall Guide: Honeywell Vista 128BPT and 250BPT
Install Guide: Honeywell Vista 128BPT and 250BPT
 
Achieving the ultimate performance with KVM
Achieving the ultimate performance with KVM Achieving the ultimate performance with KVM
Achieving the ultimate performance with KVM
 
Embulk 20150411
Embulk 20150411Embulk 20150411
Embulk 20150411
 

Viewers also liked

Real world DSL - making technical and business people speaking the same language
Real world DSL - making technical and business people speaking the same languageReal world DSL - making technical and business people speaking the same language
Real world DSL - making technical and business people speaking the same languageMario Fusco
 
Model-Driven Software Engineering in Practice - Chapter 1 - Introduction
Model-Driven Software Engineering in Practice - Chapter 1 - IntroductionModel-Driven Software Engineering in Practice - Chapter 1 - Introduction
Model-Driven Software Engineering in Practice - Chapter 1 - IntroductionMarco Brambilla
 
Domain-Specific Languages
Domain-Specific LanguagesDomain-Specific Languages
Domain-Specific LanguagesJavier Canovas
 
MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!)
MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!)MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!)
MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!)Jordi Cabot
 
EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)mikaelbarbero
 
IFML - The interaction flow modeling language, the OMG standard for UI modeli...
IFML - The interaction flow modeling language, the OMG standard for UI modeli...IFML - The interaction flow modeling language, the OMG standard for UI modeli...
IFML - The interaction flow modeling language, the OMG standard for UI modeli...Marco Brambilla
 
You need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF ProfilesYou need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF ProfilesPhilip Langer
 
Industrial and Academic Experiences with a User Interaction Modeling Language...
Industrial and Academic Experiences with a User Interaction Modeling Language...Industrial and Academic Experiences with a User Interaction Modeling Language...
Industrial and Academic Experiences with a User Interaction Modeling Language...Marco Brambilla
 
Programming in UML: An Introduction to fUML and Alf
Programming in UML: An Introduction to fUML and AlfProgramming in UML: An Introduction to fUML and Alf
Programming in UML: An Introduction to fUML and AlfEd Seidewitz
 
MoDisco EclipseCon2010
MoDisco EclipseCon2010MoDisco EclipseCon2010
MoDisco EclipseCon2010fmadiot
 
Textual Modeling Framework Xtext
Textual Modeling Framework XtextTextual Modeling Framework Xtext
Textual Modeling Framework XtextSebastian Zarnekow
 
ATL tutorial - EclipseCon 2008
ATL tutorial - EclipseCon 2008ATL tutorial - EclipseCon 2008
ATL tutorial - EclipseCon 2008William Piers
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Pythonkwatch
 
20 examples on Domain-Specific Modeling Languages
20 examples on Domain-Specific Modeling Languages20 examples on Domain-Specific Modeling Languages
20 examples on Domain-Specific Modeling LanguagesJuha-Pekka Tolvanen
 
Interaction Flow Modeling Language: updates on the Beta2 version - by the OMG...
Interaction Flow Modeling Language: updates on the Beta2 version - by the OMG...Interaction Flow Modeling Language: updates on the Beta2 version - by the OMG...
Interaction Flow Modeling Language: updates on the Beta2 version - by the OMG...Marco Brambilla
 
Industrial experiences on Domain-Specific Modeling
Industrial experiences on Domain-Specific ModelingIndustrial experiences on Domain-Specific Modeling
Industrial experiences on Domain-Specific ModelingJuha-Pekka Tolvanen
 

Viewers also liked (20)

Real world DSL - making technical and business people speaking the same language
Real world DSL - making technical and business people speaking the same languageReal world DSL - making technical and business people speaking the same language
Real world DSL - making technical and business people speaking the same language
 
Model-Driven Software Engineering in Practice - Chapter 1 - Introduction
Model-Driven Software Engineering in Practice - Chapter 1 - IntroductionModel-Driven Software Engineering in Practice - Chapter 1 - Introduction
Model-Driven Software Engineering in Practice - Chapter 1 - Introduction
 
Domain-Specific Languages
Domain-Specific LanguagesDomain-Specific Languages
Domain-Specific Languages
 
Introducing MDSD
Introducing MDSDIntroducing MDSD
Introducing MDSD
 
MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!)
MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!)MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!)
MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!)
 
EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)
 
IFML - The interaction flow modeling language, the OMG standard for UI modeli...
IFML - The interaction flow modeling language, the OMG standard for UI modeli...IFML - The interaction flow modeling language, the OMG standard for UI modeli...
IFML - The interaction flow modeling language, the OMG standard for UI modeli...
 
You need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF ProfilesYou need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF Profiles
 
Industrial and Academic Experiences with a User Interaction Modeling Language...
Industrial and Academic Experiences with a User Interaction Modeling Language...Industrial and Academic Experiences with a User Interaction Modeling Language...
Industrial and Academic Experiences with a User Interaction Modeling Language...
 
Programming in UML: An Introduction to fUML and Alf
Programming in UML: An Introduction to fUML and AlfProgramming in UML: An Introduction to fUML and Alf
Programming in UML: An Introduction to fUML and Alf
 
MoDisco EclipseCon2010
MoDisco EclipseCon2010MoDisco EclipseCon2010
MoDisco EclipseCon2010
 
Textual Modeling Framework Xtext
Textual Modeling Framework XtextTextual Modeling Framework Xtext
Textual Modeling Framework Xtext
 
Acceleo Code Generation
Acceleo Code GenerationAcceleo Code Generation
Acceleo Code Generation
 
Eugenia
EugeniaEugenia
Eugenia
 
ATL tutorial - EclipseCon 2008
ATL tutorial - EclipseCon 2008ATL tutorial - EclipseCon 2008
ATL tutorial - EclipseCon 2008
 
OCL tutorial
OCL tutorial OCL tutorial
OCL tutorial
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
 
20 examples on Domain-Specific Modeling Languages
20 examples on Domain-Specific Modeling Languages20 examples on Domain-Specific Modeling Languages
20 examples on Domain-Specific Modeling Languages
 
Interaction Flow Modeling Language: updates on the Beta2 version - by the OMG...
Interaction Flow Modeling Language: updates on the Beta2 version - by the OMG...Interaction Flow Modeling Language: updates on the Beta2 version - by the OMG...
Interaction Flow Modeling Language: updates on the Beta2 version - by the OMG...
 
Industrial experiences on Domain-Specific Modeling
Industrial experiences on Domain-Specific ModelingIndustrial experiences on Domain-Specific Modeling
Industrial experiences on Domain-Specific Modeling
 

More from Peter Friese

Building Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsBuilding Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsPeter Friese
 
Firebase & SwiftUI Workshop
Firebase & SwiftUI WorkshopFirebase & SwiftUI Workshop
Firebase & SwiftUI WorkshopPeter Friese
 
Building Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsBuilding Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsPeter Friese
 
Firebase for Apple Developers - SwiftHeroes
Firebase for Apple Developers - SwiftHeroesFirebase for Apple Developers - SwiftHeroes
Firebase for Apple Developers - SwiftHeroesPeter Friese
 
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
 +  = ❤️ (Firebase for Apple Developers) at Swift LeedsPeter Friese
 
async/await in Swift
async/await in Swiftasync/await in Swift
async/await in SwiftPeter Friese
 
Firebase for Apple Developers
Firebase for Apple DevelopersFirebase for Apple Developers
Firebase for Apple DevelopersPeter Friese
 
Building Apps with SwiftUI and Firebase
Building Apps with SwiftUI and FirebaseBuilding Apps with SwiftUI and Firebase
Building Apps with SwiftUI and FirebasePeter Friese
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebasePeter Friese
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebasePeter Friese
 
6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase Auth6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase AuthPeter Friese
 
Five Things You Didn't Know About Firebase Auth
Five Things You Didn't Know About Firebase AuthFive Things You Didn't Know About Firebase Auth
Five Things You Didn't Know About Firebase AuthPeter Friese
 
Building High-Quality Apps for Google Assistant
Building High-Quality Apps for Google AssistantBuilding High-Quality Apps for Google Assistant
Building High-Quality Apps for Google AssistantPeter Friese
 
Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on Google Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on Google Peter Friese
 
Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on GoogleBuilding Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on GooglePeter Friese
 
What's new in Android Wear 2.0
What's new in Android Wear 2.0What's new in Android Wear 2.0
What's new in Android Wear 2.0Peter Friese
 
Google Fit, Android Wear & Xamarin
Google Fit, Android Wear & XamarinGoogle Fit, Android Wear & Xamarin
Google Fit, Android Wear & XamarinPeter Friese
 
Introduction to Android Wear
Introduction to Android WearIntroduction to Android Wear
Introduction to Android WearPeter Friese
 
Google Play Services Rock
Google Play Services RockGoogle Play Services Rock
Google Play Services RockPeter Friese
 
Introduction to Android Wear
Introduction to Android WearIntroduction to Android Wear
Introduction to Android WearPeter Friese
 

More from Peter Friese (20)

Building Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsBuilding Reusable SwiftUI Components
Building Reusable SwiftUI Components
 
Firebase & SwiftUI Workshop
Firebase & SwiftUI WorkshopFirebase & SwiftUI Workshop
Firebase & SwiftUI Workshop
 
Building Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsBuilding Reusable SwiftUI Components
Building Reusable SwiftUI Components
 
Firebase for Apple Developers - SwiftHeroes
Firebase for Apple Developers - SwiftHeroesFirebase for Apple Developers - SwiftHeroes
Firebase for Apple Developers - SwiftHeroes
 
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
 
async/await in Swift
async/await in Swiftasync/await in Swift
async/await in Swift
 
Firebase for Apple Developers
Firebase for Apple DevelopersFirebase for Apple Developers
Firebase for Apple Developers
 
Building Apps with SwiftUI and Firebase
Building Apps with SwiftUI and FirebaseBuilding Apps with SwiftUI and Firebase
Building Apps with SwiftUI and Firebase
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and Firebase
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and Firebase
 
6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase Auth6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase Auth
 
Five Things You Didn't Know About Firebase Auth
Five Things You Didn't Know About Firebase AuthFive Things You Didn't Know About Firebase Auth
Five Things You Didn't Know About Firebase Auth
 
Building High-Quality Apps for Google Assistant
Building High-Quality Apps for Google AssistantBuilding High-Quality Apps for Google Assistant
Building High-Quality Apps for Google Assistant
 
Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on Google Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on Google
 
Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on GoogleBuilding Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on Google
 
What's new in Android Wear 2.0
What's new in Android Wear 2.0What's new in Android Wear 2.0
What's new in Android Wear 2.0
 
Google Fit, Android Wear & Xamarin
Google Fit, Android Wear & XamarinGoogle Fit, Android Wear & Xamarin
Google Fit, Android Wear & Xamarin
 
Introduction to Android Wear
Introduction to Android WearIntroduction to Android Wear
Introduction to Android Wear
 
Google Play Services Rock
Google Play Services RockGoogle Play Services Rock
Google Play Services Rock
 
Introduction to Android Wear
Introduction to Android WearIntroduction to Android Wear
Introduction to Android Wear
 

Recently uploaded

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 

Recently uploaded (20)

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 

The Unbearable Stupidity of Modeling

  • 1. The Unbearable Stupidity of Modeling Ed Merks | Peter Friese (c) 2009 Ed Merks | Peter Friese. Distributed under the EDL V1.0 - http://www.eclipse.org/org/documents/edl-v10.php Thursday, March 26, 2009
  • 2. Twitter: #eclipsecon #emf http://ed-merks.blogspot.com http://www.peterfriese.de Thursday, March 26, 2009
  • 3. “The Learning Curve is Too Steep” Thursday, March 26, 2009
  • 4. “The Learning Curve is Too Steep” Thursday, March 26, 2009
  • 5. “The Learning Curve is Too Steep” • Use newsgroups Thursday, March 26, 2009
  • 6. “The Learning Curve is Too Steep” • Use newsgroups • Get Trained: Eclipse Training Alliance Thursday, March 26, 2009
  • 7. “The Learning Curve is Too Steep” • Use newsgroups • Get Trained: Eclipse Training Alliance • Consult with someone who knows Thursday, March 26, 2009
  • 8. “UML is Way Too Complex” Thursday, March 26, 2009
  • 9. “UML is Way Too Complex” Thursday, March 26, 2009
  • 10. “UML is Way Too Complex” UML 1: 9 diagram types Thursday, March 26, 2009
  • 11. “UML is Way Too Complex” UML 1: 9 diagram types UML 2: 13 diagram types Thursday, March 26, 2009
  • 12. “UML is Way Too Complex” UML 1: 9 diagram types UML 2: 13 diagram types Complex underlying structure Thursday, March 26, 2009
  • 13. “UML is Way Too Complex” UML 1: 9 diagram types UML 2: 13 diagram types Complex underlying structure UML ≠ Modeling Thursday, March 26, 2009
  • 14. “UML is Way Too Complex” UML 1: 9 diagram types UML 2: 13 diagram types Complex underlying structure UML ≠ Modeling You don’t need to use it! Thursday, March 26, 2009
  • 15. So What is Modeling Anyway? Basically a model is a simplified abstract view of the complex reality (Wikipedia) Thursday, March 26, 2009
  • 16. So What is Modeling Anyway? Basically a model is a simplified abstract view of the complex reality (Wikipedia) Thursday, March 26, 2009
  • 17. It’s about simplicity! Basically a model is a simplified abstract view of the complex reality (Wikipedia) Thursday, March 26, 2009
  • 18. It’s about simplicity! Basically a model is a simplified abstract view of the complex reality (Wikipedia) Thursday, March 26, 2009
  • 19. It’s about simplicity! Basically a model is a simplified abstract view of the complex reality (Wikipedia) Thursday, March 26, 2009
  • 20. It’s about simplicity! Basically a model is a simplified abstract view of the complex reality (Wikipedia) Car color maxSpeed startEngine accelerate stopEngine brake Thursday, March 26, 2009
  • 21. “Oh, That’s Too Abstract For Me!” Thursday, March 26, 2009
  • 22. “Oh, That’s Too Abstract For Me!” Abstraction is the process [...] of reducing the information content of a concept [...] to retain only information which is relevant for a particular purpose. Thursday, March 26, 2009
  • 23. @SuppressWarnings(quot;serialquot;) @Entity @Table(name = quot;CUSTOMER_INFOquot;) public class CustomerInfo implements Serializable { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = quot;idSeqquot;) @SequenceGenerator(name = quot;idSeqquot;, sequenceName = quot;CUST_SEQquot;, allocationSize = 1) @Column(name = quot;CUST_IDquot;, nullable = false) private String customerId; public void setCustomerId(String customerId) { this.customerId = customerId; } public String getCustomerId() { return customerId; } @Column(name = quot;EMAILquot;, nullable = false, length = 128) private String emailAddress; public String getEmailAddress() { return emailAddress; } public void setEmailAddress(String emailAddress) { String oldValue = emailAddress; this.emailAddress = emailAddress; firePropertyChangedEvent(quot;emailAddressquot;, oldValue, this.emailAddress); } Thursday, March 26, 2009
  • 24. @SuppressWarnings(quot;serialquot;) @Entity @Table(name = quot;CUSTOMER_INFOquot;) public class CustomerInfo implements Serializable { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = quot;idSeqquot;) @SequenceGenerator(name = quot;idSeqquot;, sequenceName = quot;CUST_SEQquot;, allocationSize = 1) @Column(name = quot;CUST_IDquot;, nullable = false) private String customerId; public void setCustomerId(String customerId) { this.customerId = customerId; } public String getCustomerId() { return customerId; } @Column(name = quot;EMAILquot;, nullable = false, length = 128) private String emailAddress; public String getEmailAddress() { return emailAddress; } public void setEmailAddress(String emailAddress) { String oldValue = emailAddress; this.emailAddress = emailAddress; firePropertyChangedEvent(quot;emailAddressquot;, oldValue, this.emailAddress); } Thursday, March 26, 2009
  • 25. entity CustomerInfo (id=CUST_ID, sequenceName=CUST_SEQ) { String emailAddress (notNull, length = 128) } Thursday, March 26, 2009
  • 26. entity CustomerInfo (id=CUST_ID, sequenceName=CUST_SEQ) { String emailAddress (notNull, length = 128) } This actually is a model! Thursday, March 26, 2009
  • 27. entity CustomerInfo (id=CUST_ID, sequenceName=CUST_SEQ) { String emailAddress (notNull, length = 128) } This actually is a model! Don’t believe? Come to the Xtext BOF. Thursday, March 26, 2009
  • 28. Models Can Take Different Shapes Basically a model is a simplified abstract view of the complex reality (Wikipedia) !quot;#$%&'()*+quot;,-)+./0(+123'$+24 ....!quot;#$%#+56+/&+4 ......!quot;#$%+*+(+/7. ......../0(+12&89*$:+/2. ........7-)+127:++%3'$+2. ........(9/;&&6:#12<2 ........(0quot;;&&6:#126/='6/$+$2. ........+&':+%'))'#97+12)0:+/72>4 ....!>quot;#$%#+56+/&+4 !quot;#$%&'%()*+,-&*'./0*'1 ....!quot;#$%077:9=67+. ....../0(+12*0=+*2. ''2)+%(3'3*)4-#*$567 ......7-)+12quot;#$%#7:9/?2>4 ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67 !>quot;#$%&'()*+quot;,-)+4 ''4%9):./0*;'3*)<=%$0+*(567 ''./0*'3*)>-+*()567 ''8/%0'9*)>-+*()5./0*'8-$quot;*67 ?'@@'./0* 0..1 parent Node label: EString 0..* children Thursday, March 26, 2009
  • 29. Models Can Take Different Shapes Basically a model is a simplified abstract view of the complex reality (Wikipedia) !quot;#$%&'()*+quot;,-)+./0(+123'$+24 ....!quot;#$%#+56+/&+4 ......!quot;#$%+*+(+/7. 0..1 ......../0(+12&89*$:+/2. parent ........7-)+127:++%3'$+2. Node ........(9/;&&6:#12<2 label: EString ........(0quot;;&&6:#126/='6/$+$2. ........+&':+%'))'#97+12)0:+/72>4 0..* ....!>quot;#$%#+56+/&+4 children ....!quot;#$%077:9=67+. ....../0(+12*0=+*2. !quot;#$%&'%()*+,-&*'./0*'1 ......7-)+12quot;#$%#7:9/?2>4 !>quot;#$%&'()*+quot;,-)+4 ''2)+%(3'3*)4-#*$567 ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67 ''4%9):./0*;'3*)<=%$0+*(567 ''./0*'3*)>-+*()567 ''8/%0'9*)>-+*()5./0*'8-$quot;*67 ?'@@'./0* Thursday, March 26, 2009
  • 30. Models Can Take Different Shapes Basically a model is a simplified abstract view of the complex reality (Wikipedia) 0..1 parent Node label: EString 0..* children !quot;#$%&'%()*+,-&*'./0*'1 ''2)+%(3'3*)4-#*$567 !quot;#$%&'()*+quot;,-)+./0(+123'$+24 ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67 ''4%9):./0*;'3*)<=%$0+*(567 ....!quot;#$%#+56+/&+4 ''./0*'3*)>-+*()567 ''8/%0'9*)>-+*()5./0*'8-$quot;*67 ?'@@'./0* ......!quot;#$%+*+(+/7. ......../0(+12&89*$:+/2. ........7-)+127:++%3'$+2. ........(9/;&&6:#12<2 ........(0quot;;&&6:#126/='6/$+$2. ........+&':+%'))'#97+12)0:+/72>4 ....!>quot;#$%#+56+/&+4 ....!quot;#$%077:9=67+. ....../0(+12*0=+*2. ......7-)+12quot;#$%#7:9/?2>4 !>quot;#$%&'()*+quot;,-)+4 Thursday, March 26, 2009
  • 31. Models Can Take Different Shapes Basically a model is a simplified abstract view of the complex reality (Wikipedia) !quot;#$%&'%()*+,-&*'./0*'1 ''2)+%(3'3*)4-#*$567 ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67 ''4%9):./0*;'3*)<=%$0+*(567 !quot;#$%&'()*+quot;,-)+./0(+123'$+24 ''./0*'3*)>-+*()567 ....!quot;#$%#+56+/&+4 ''8/%0'9*)>-+*()5./0*'8-$quot;*67 ......!quot;#$%+*+(+/7. 0..1 ?'@@'./0* ......../0(+12&89*$:+/2. parent ........7-)+127:++%3'$+2. Node ........(9/;&&6:#12<2 label: EString ........(0quot;;&&6:#126/='6/$+$2. ........+&':+%'))'#97+12)0:+/72>4 0..* ....!>quot;#$%#+56+/&+4 children ....!quot;#$%077:9=67+. ....../0(+12*0=+*2. ......7-)+12quot;#$%#7:9/?2>4 !>quot;#$%&'()*+quot;,-)+4 Thursday, March 26, 2009
  • 32. EMF Acts as a Hub for Models !quot;#$%&'()*+quot;,-)+./0(+123'$+24 ....!quot;#$%#+56+/&+4 0..1 ......!quot;#$%+*+(+/7. parent ......../0(+12&89*$:+/2. Node ........7-)+127:++%3'$+2. label: EString ........(9/;&&6:#12<2 ........(0quot;;&&6:#126/='6/$+$2. ........+&':+%'))'#97+12)0:+/72>4 0..* ....!>quot;#$%#+56+/&+4 children ....!quot;#$%077:9=67+. ....../0(+12*0=+*2. ......7-)+12quot;#$%#7:9/?2>4 !>quot;#$%&'()*+quot;,-)+4 !quot;#$%&'%()*+,-&*'./0*'1 ''2)+%(3'3*)4-#*$567 ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67 ''4%9):./0*;'3*)<=%$0+*(567 ''./0*'3*)>-+*()567 ''8/%0'9*)>-+*()5./0*'8-$quot;*67 ?'@@'./0* Thursday, March 26, 2009
  • 33. EMF Acts as a Hub for Models !quot;#$%&'()*+quot;,-)+./0(+123'$+24 ....!quot;#$%#+56+/&+4 0..1 ......!quot;#$%+*+(+/7. parent ......../0(+12&89*$:+/2. Node ........7-)+127:++%3'$+2. label: EString ........(9/;&&6:#12<2 ........(0quot;;&&6:#126/='6/$+$2. ........+&':+%'))'#97+12)0:+/72>4 0..* ....!>quot;#$%#+56+/&+4 children ....!quot;#$%077:9=67+. ....../0(+12*0=+*2. ......7-)+12quot;#$%#7:9/?2>4 !>quot;#$%&'()*+quot;,-)+4 !quot;#$%&'%()*+,-&*'./0*'1 ''2)+%(3'3*)4-#*$567 ''8/%0'9*)4-#*$52)+%(3'8-$quot;*67 ''4%9):./0*;'3*)<=%$0+*(567 ''./0*'3*)>-+*()567 ''8/%0'9*)>-+*()5./0*'8-$quot;*67 ?'@@'./0* Thursday, March 26, 2009
  • 34. “All This Buzz About Meta - It Drives Me Crazy!” Thursday, March 26, 2009
  • 35. “All This Buzz About Meta - It Drives Me Crazy!” Thursday, March 26, 2009
  • 36. “All This Buzz About Meta - It Drives Me Crazy!” Thursday, March 26, 2009
  • 38. Meta = Description aNode1 label: quot;carquot; 0..1 parent aNode2 Node label: quot;wheelquot; label: EString aNode3 0..* label: quot;wheelquot; children aNode4 label: quot;wheelquot; aNode5 label: quot;wheelquot; Thursday, March 26, 2009
  • 39. Meta = Description aNode1 label: quot;carquot; 0..1 parent aNode2 Node label: quot;wheelquot; label: EString aNode3 0..* label: quot;wheelquot; children aNode4 label: quot;wheelquot; aNode5 label: quot;wheelquot; Description Instance Thursday, March 26, 2009
  • 40. Meta = Description aNode1 label: quot;carquot; 0..1 parent aNode2 Node label: quot;wheelquot; label: EString aNode3 0..* label: quot;wheelquot; children aNode4 label: quot;wheelquot; aNode5 label: quot;wheelquot; Description Instance Thursday, March 26, 2009
  • 41. Meta = Description aNode1 label: quot;carquot; 0..1 parent aNode2 Node label: quot;wheelquot; label: EString aNode3 0..* label: quot;wheelquot; children aNode4 label: quot;wheelquot; aNode5 label: quot;wheelquot; Description Instance Thursday, March 26, 2009
  • 42. “Modeling is Too Restrictive...” http://www.flickr.com/photos/two-wrongs/205467442/ “...it will limit my creativity” Thursday, March 26, 2009
  • 43. Let’s Talk About Creativity Thursday, March 26, 2009
  • 44. Let’s Talk About Creativity How To Create A Bean Class With A Simple Property – Create an interface to represent the API for X • A method to get the value of y • A method to set the value of y – A class to implement that API for X • A variable to store the state for y • Code to initialize the default value • A method to get the value of y • A method to set the value of y – A factory interface for creating instances • A method to create an instance of X – An class to implement the factory interface • A method to create an instance of the class for X Thursday, March 26, 2009
  • 45. Let’s Talk About Creativity How To Create A Bean Class With A Simple Property – Create an interface to represent the API for X • A method to get the value of y • A method to set the value of y – A class to implement that API for X • A variable to store the state for y • Code to initialize the default value • A method to get the value of y • A method to set the value of y – A factory interface for creating instances • A method to create an instance of X – An class to implement the factory interface • A method to create an instance of the class for X Thursday, March 26, 2009
  • 46. Let’s Talk About Creativity How To Create A Bean Class With A Simple Property – Create an interface to represent the API for X • A method to get the value of y • A method to set the value of y – A class to implement that API for X • A variable to store the state for y • Code to initialize the default value • A method to get the value of y • A method to set the value of y – A factory interface for creating instances • A method to create an instance of X – An class to implement the factory interface • A method to create an instance of the class for X Thursday, March 26, 2009
  • 47. Tedium is the True Killer of Creativity manually written code Frameworks schematic code (manually written) Libraries Thursday, March 26, 2009
  • 48. Code Generation Kills Tedium Model manually written code Generator Frameworks schematic code (generated) Libraries Thursday, March 26, 2009
  • 49. How Code Generation Works Step 1: capture knowledge Thursday, March 26, 2009
  • 50. How Code Generation Works Step 1: capture knowledge Eclipse Guru Generator Thursday, March 26, 2009
  • 51. How Code Generation Works Step 1: capture knowledge Thursday, March 26, 2009
  • 52. How Code Generation Works Step 1: capture knowledge Thursday, March 26, 2009
  • 53. How Code Generation Works Step 1: capture knowledge Step 2: provide model Thursday, March 26, 2009
  • 54. How Code Generation Works Step 1: capture knowledge Step 2: provide model entity CustomerInfo (id=CUST_ID, sequenceName=CUST_SEQ) { String emailAddress (notNull, length = 128) } Thursday, March 26, 2009
  • 55. How Code Generation Works Step 1: capture knowledge Step 2: provide model Step 3: generate code entity CustomerInfo (id=CUST_ID, sequenceName=CUST_SEQ) { String emailAddress (notNull, length = 128) } Thursday, March 26, 2009
  • 56. How Code Generation Works Step 1: capture knowledge Step 2: provide model Step 3: generate code @SuppressWarnings(quot;serialquot;) @Entity @Table(name = quot;CUSTOMER_INFOquot;) public class CustomerInfo implements Serializable { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = quot;idSeqquot;) @SequenceGenerator(name = quot;idSeqquot;, sequenceName = quot;CUST_SEQquot;, allocationSize = 1) @Column(name = quot;CUST_IDquot;, nullable = false) private String customerId; public void setCustomerId(String customerId) { this.customerId = customerId; } public entity CustomerInfo String getCustomerId() { (id=CUST_ID, sequenceName=CUST_SEQ) { return customerId; } String emailAddress (notNull, length = 128) } @Column(name = quot;EMAILquot;, nullable = false, length = 128) private String emailAddress; public String getEmailAddress() { return emailAddress; } public void setEmailAddress(String emailAddress) { String oldValue = emailAddress; this.emailAddress = emailAddress; firePropertyChangedEvent(quot;emailAddressquot;, oldValue, this.emailAddress); } Thursday, March 26, 2009
  • 57. “Ok, But Generated Code Sucks” Thursday, March 26, 2009
  • 58. “Ok, But Generated Code Sucks” Oh, really?! Thursday, March 26, 2009
  • 59. “Ok, But Generated Code Sucks” Thursday, March 26, 2009
  • 60. “Ok, But Generated Code Sucks” • YOU write the code generator Thursday, March 26, 2009
  • 61. “Ok, But Generated Code Sucks” • YOU write the code generator • YOU are responsible for code quality Thursday, March 26, 2009
  • 62. “Ok, But Generated Code Sucks” • YOU write the code generator • YOU are responsible for code quality • YOU are responsible for performance Thursday, March 26, 2009
  • 63. “Ok, But Generated Code Sucks” • YOU write the code generator • YOU are responsible for code quality • YOU are responsible for performance Thursday, March 26, 2009
  • 64. “Ok, But Generated Code Sucks” • YOU write the code generator • YOU are responsible for code quality • YOU are responsible for performance • Template Languages have matured Thursday, March 26, 2009
  • 65. “Ok, But Generated Code Sucks” • YOU write the code generator • YOU are responsible for code quality • YOU are responsible for performance • Template Languages have matured • JET / Acceleo / Xpand Thursday, March 26, 2009
  • 67. “Diagrams Suck” • Use wisely! Thursday, March 26, 2009
  • 68. “Diagrams Suck” • Use wisely! • Domain Specific Diagrams :-) Thursday, March 26, 2009
  • 69. “Diagrams Suck” • Use wisely! • Domain Specific Diagrams :-) • Overview :-) Thursday, March 26, 2009
  • 70. “Diagrams Suck” • Use wisely! • Domain Specific Diagrams :-) • Overview :-) • Reverse Engineering :-( Thursday, March 26, 2009
  • 71. “DSLs will create a Tower of Babel” Thursday, March 26, 2009
  • 72. “DSLs will create a Tower of Babel” Thursday, March 26, 2009
  • 73. “DSLs will create a Tower of Babel” Will domain experts write programs? Thursday, March 26, 2009
  • 74. “DSLs will create a Tower of Babel” Will domain experts write programs? No - but they will be able to read them! Thursday, March 26, 2009
  • 75. “DSLs will create a Tower of Babel” Will domain experts write programs? No - but they will be able to read them! Language barriers get torn down ! Thursday, March 26, 2009
  • 76. “Modeling Enforces Onerous Processes” http://www.flickr.com/photos/orvaratli/2620988946/ Thursday, March 26, 2009
  • 77. “Modeling Enforces Onerous Processes” Thursday, March 26, 2009
  • 78. “Modeling Enforces Onerous Processes” Modeling is just a tool Thursday, March 26, 2009
  • 79. “Modeling Enforces Onerous Processes” Modeling is just a tool Tools are orthogonal to your process Thursday, March 26, 2009
  • 80. “Modeling Enforces Onerous Processes” Modeling is just a tool Tools are orthogonal to your process Modeling can be use with any kind of process Thursday, March 26, 2009
  • 81. “Modeling is Just a Marketing Ploy” Thursday, March 26, 2009
  • 82. “Modeling is Just a Marketing Ploy” Expensive tools Thursday, March 26, 2009
  • 83. “Modeling is Just a Marketing Ploy” Expensive tools Vendor lock-in Thursday, March 26, 2009
  • 84. “Modeling is Just a Marketing Ploy” Expensive tools Vendor lock-in Expensive support contracts Thursday, March 26, 2009
  • 85. “Modeling is Just a Marketing Ploy” Expensive tools Vendor lock-in Expensive support contracts Incompatible versions Thursday, March 26, 2009
  • 86. “Modeling is Just a Marketing Ploy” Expensive tools Vendor lock-in Expensive support contracts Incompatible versions Thursday, March 26, 2009
  • 87. “Modeling is Just a Marketing Ploy” Can you say “Open Source”? SD Times rates EMF “Top Shelf” (http://www.sdtimes.com/content/article.aspx?ArticleID=32287) Thursday, March 26, 2009
  • 88. “Modeling Will Make Me Redundant” Thursday, March 26, 2009
  • 89. Three Things To Take Home Thursday, March 26, 2009
  • 90. Three Things To Take Home Generated code is as good as the effort you put into the Generator Thursday, March 26, 2009
  • 91. Three Things To Take Home Generated code is as good as the effort you put into the Generator The Eclipse Modeling Project provides a great tool stack - for free! Thursday, March 26, 2009
  • 92. Three Things To Take Home Generated code is as good as the effort you put into the Generator The Eclipse Modeling Project provides a great tool stack - for free! Modeling will set your creativity free! Thursday, March 26, 2009

Editor's Notes